约 13410 字

约 67 分钟

#C 语言标准库头文件 stdbit.h

这个头文件提供 位操作 的相关功能。例如处理 C 对象的字节序等。

#示例

#include <stdio.h>
#include <stdbit.h>

int main(void) {
    unsigned int x = 0x0F0F; // 0000111100001111
    
    printf("开头的 0 的位数: %u\n", stdc_leading_zeros(x));
    printf("结尾的 1 的位数: %u\n", stdc_trailing_ones(x));
    printf("1 的总位数: %u\n", stdc_count_ones(x));
    printf("最小位宽度: %u\n", stdc_bit_width(x));
    
    if (__STDC_ENDIAN_NATIVE__ == __STDC_ENDIAN_LITTLE__) {
        printf("系统原生字节序为:小端\n");
    } else if (__STDC_ENDIAN_NATIVE__ == __STDC_ENDIAN_BIG__) {
        printf("系统原生字节序为:大端\n");
    } else {
        printf("系统原生字节序为:未知\n");
    }
    
    return 0;
}

运行结果:

开头的 0 的位数: 20
结尾的 1 的位数: 4
1 的总位数: 8
最小位宽度: 12
系统原生字节序为:小端

#宏

宏标准说明
__STDC_ENDIAN_LITTLE__C23小端字节序(低字节存储在低地址)
__STDC_ENDIAN_BIG__C23大端字节序(高字节存储在低地址)
__STDC_ENDIAN_NATIVE__C23原生字节序
函数标准说明
stdc_leading_zerosC23从最高有效位开始连续的 0 的位数
stdc_leading_onesC23从最高有效位开始连续的 1 的位数
stdc_trailing_zerosC23从最低有效位开始连续的 0 的位数
stdc_trailing_onesC23从最低有效位开始连续的 1 的位数
stdc_first_leading_zeroC23从最高有效位开始第一个 0 所在的位
stdc_first_leading_oneC23从最高有效位开始第一个 1 所在的位
stdc_first_trailing_zeroC23从最低有效位开始第一个 0 所在的位
stdc_first_trailing_oneC23从最低有效位开始第一个 1 所在的位
stdc_count_zerosC230 的总位数
stdc_count_onesC231 的总位数
stdc_has_single_bitC23是否只有一位是 1,即是否是 2 的整数次幂
stdc_bit_widthC23表示该值所需要的最少位数
stdc_bit_floorC23找出不大于给定值的 2 的最大整数次幂
stdc_bit_ceilC23找出不小于给定值的 2 的最小整数次幂

#函数

函数标准说明
stdc_leading_zeros_ucC23unsigned char 从最高有效位开始连续的 0 的位数
stdc_leading_zeros_usC23unsigned short 从最高有效位开始连续的 0 的位数
stdc_leading_zeros_uiC23unsigned int 从最高有效位开始连续的 0 的位数
stdc_leading_zeros_ulC23unsigned long 从最高有效位开始连续的 0 的位数
stdc_leading_zeros_ullC23unsigned long long 从最高有效位开始连续的 0 的位数
stdc_leading_ones_ucC23unsigned char 从最高有效位开始连续的 1 的位数
stdc_leading_ones_usC23unsigned short 从最高有效位开始连续的 1 的位数
stdc_leading_ones_uiC23unsigned int 从最高有效位开始连续的 1 的位数
stdc_leading_ones_ulC23unsigned long 从最高有效位开始连续的 1 的位数
stdc_leading_ones_ullC23unsigned long long 从最高有效位开始连续的 1 的位数
stdc_trailing_zeros_ucC23unsigned char 从最低有效位开始连续的 0 的位数
stdc_trailing_zeros_usC23unsigned short 从最低有效位开始连续的 0 的位数
stdc_trailing_zeros_uiC23unsigned int 从最低有效位开始连续的 0 的位数
stdc_trailing_zeros_ulC23unsigned long 从最低有效位开始连续的 0 的位数
stdc_trailing_zeros_ullC23unsigned long long 从最低有效位开始连续的 0 的位数
stdc_trailing_ones_ucC23unsigned char 从最低有效位开始连续的 1 的位数
stdc_trailing_ones_usC23unsigned short 从最低有效位开始连续的 1 的位数
stdc_trailing_ones_uiC23unsigned int 从最低有效位开始连续的 1 的位数
stdc_trailing_ones_ulC23unsigned long 从最低有效位开始连续的 1 的位数
stdc_trailing_ones_ullC23unsigned long long 从最低有效位开始连续的 1 的位数
stdc_first_leading_zero_uc C23unsigned char 从最高有效位开始第一个 0 所在的位
stdc_first_leading_zero_usC23unsigned short 从最高有效位开始第一个 0 所在的位
stdc_first_leading_zero_uiC23unsigned int 从最高有效位开始第一个 0 所在的位
stdc_first_leading_zero_ulC23unsigned long 从最高有效位开始第一个 0 所在的位
stdc_first_leading_zero_ullC23unsigned long long 从最高有效位开始第一个 0 所在的位
stdc_first_leading_one_uc C23unsigned char 从最高有效位开始第一个 1 所在的位
stdc_first_leading_one_usC23unsigned short 从最高有效位开始第一个 1 所在的位
stdc_first_leading_one_uiC23unsigned int 从最高有效位开始第一个 1 所在的位
stdc_first_leading_one_ulC23unsigned long 从最高有效位开始第一个 1 所在的位
stdc_first_leading_one_ullC23unsigned long long 从最高有效位开始第一个 1 所在的位
stdc_first_trailing_zero_uc C23unsigned char 从最低有效位开始第一个 0 所在的位
stdc_first_trailing_zero_usC23unsigned short 从最低有效位开始第一个 0 所在的位
stdc_first_trailing_zero_uiC23unsigned int 从最低有效位开始第一个 0 所在的位
stdc_first_trailing_zero_ulC23unsigned long 从最低有效位开始第一个 0 所在的位
stdc_first_trailing_zero_ullC23unsigned long long 从最低有效位开始第一个 0 所在的位
stdc_first_trailing_one_uc C23unsigned char 从最低有效位开始第一个 1 所在的位
stdc_first_trailing_one_usC23unsigned short 从最低有效位开始第一个 1 所在的位
stdc_first_trailing_one_uiC23unsigned int 从最低有效位开始第一个 1 所在的位
stdc_first_trailing_one_ulC23unsigned long 从最低有效位开始第一个 1 所在的位
stdc_first_trailing_one_ullC23unsigned long long 从最低有效位开始第一个 1 所在的位
stdc_count_zeros_uc C23unsigned char 中 0 的位数
stdc_count_zeros_usC23unsigned short 中 0 的位数
stdc_count_zeros_uiC23unsigned int 中 0 的位数
stdc_count_zeros_ulC23unsigned long 中 0 的位数
stdc_count_zeros_ullC23unsigned long long 中 0 的位数
stdc_count_ones_uc C23unsigned char 中 1 的位数
stdc_count_ones_usC23unsigned short 中 1 的位数
stdc_count_ones_uiC23unsigned int 中 1 的位数
stdc_count_ones_ulC23unsigned long 中 1 的位数
stdc_count_ones_ullC23unsigned long long 中 1 的位数
stdc_has_single_bit_uc C23unsigned char 中是否只有一位是 1,即是否是 2 的整数次幂
stdc_has_single_bit_usC23unsigned short 中是否只有一位是 1,即是否是 2 的整数次幂
stdc_has_single_bit_uiC23unsigned int 中是否只有一位是 1,即是否是 2 的整数次幂
stdc_has_single_bit_ulC23unsigned long 中是否只有一位是 1,即是否是 2 的整数次幂
stdc_has_single_bit_ullC23unsigned long long 中是否只有一位是 1,即是否是 2 的整数次幂
stdc_bit_width_uc C23表示给定 unsigned char 的值所需的最小位宽度
stdc_bit_width_usC23表示给定 unsigned short 的值所需的最小位宽度
stdc_bit_width_uiC23表示给定 unsigned int 的值所需的最小位宽度
stdc_bit_width_ulC23表示给定 unsigned long 的值所需的最小位宽度
stdc_bit_width_ullC23表示给定 unsigned long long 的值所需的最小位宽度
stdc_bit_floor_uc C23找出不大于给定 unsigned char 的值的 2 的最大整数次幂
stdc_bit_floor_usC23找出不大于给定 unsigned short 的值的 2 的最大整数次幂
stdc_bit_floor_uiC23找出不大于给定 unsigned int 的值的 2 的最大整数次幂
stdc_bit_floor_ulC23找出不大于给定 unsigned long 的值的 2 的最大整数次幂
stdc_bit_floor_ullC23找出不大于给定 unsigned long long 的值的 2 的最大整数次幂
stdc_bit_ceil_uc C23找出不小于给定 unsigned char 的值的 2 的最小整数次幂
stdc_bit_ceil_usC23找出不小于给定 unsigned short 的值的 2 的最小整数次幂
stdc_bit_ceil_uiC23找出不小于给定 unsigned int 的值的 2 的最小整数次幂
stdc_bit_ceil_ulC23找出不小于给定 unsigned long 的值的 2 的最小整数次幂
stdc_bit_ceil_ullC23找出不小于给定 unsigned long long 的值的 2 的最小整数次幂

#推荐阅读

更新: 2026/1/19

作者: PlanC

创建: 2025/6/15